package com.mgq.generic;

import java.util.ArrayList;
import java.util.List;

/**
 * @author MaGuangQi
 * 泛型方法和泛型类
 * @date 2021-12-24 16:08
 **/
public class GenericMethod<T> {
    private T key;

    public GenericMethod(T key) {
        this.key = key;
    }

    /**
     * 这是成员方法,不是泛型方法
     *
     * @return
     */
    public T getKey() {
        return key;
    }

    public void setKey(T key) {
        this.key = key;
    }

    /**
     * @param list 参数
     * @param <E>  泛型标识,具体类型,调用方法的时候指定
     * @return
     */
    public <E> E test(List<E> list) {

        return list.get(0);

    }

    /**
     * @param list 参数
     * @param <T>  泛型标识,具体类型,调用方法的时候指定. 这个T和泛型类型的T没有关系
     * @return
     */
    public <T> T test2(List<T> list) {

        return list.get(0);

    }

    public static  <T,E,K> void test3(T t,E e,K k) {
        System.out.println(t+"\t"+t.getClass());
        System.out.println(e+"\t"+e.getClass());
        System.out.println(k+"\t"+k.getClass());
    }
}

class Test {
    public static void main(String[] args) {
        GenericMethod.test3("22",1,30L);
        GenericMethod<Integer> genericMethod = new GenericMethod<>(100);
        List<String> list = new ArrayList<>();
        list.add("hello");
        list.add("world");
        String test = genericMethod.test(list);
        System.out.println(test);
    }
}
